﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Transactions;
using negocios;
using objetos;
using publico;
using System.Text;

namespace softsales.pagina.orcamento 
{

    public partial class orcamento_incluir : System.Web.UI.Page
    {

        // ORCAMENTO
        OBJ_TB_ORCAMENTO o_tb_orcamento = new OBJ_TB_ORCAMENTO();
        BLL_TB_ORCAMENTO b_tb_orcamento = new BLL_TB_ORCAMENTO();

        // ORCAMENTO ITEM
        BLL_TB_ORCAMENTO_ITEM b_tb_orcamento_item = new BLL_TB_ORCAMENTO_ITEM();
        OBJ_TB_ORCAMENTO_ITEM o_tb_orcamento_item = new OBJ_TB_ORCAMENTO_ITEM();

        // ORCAMENTO HISTORICO
        OBJ_TB_ORCAMENTO_HISTORICO o_tb_orcamento_historico = new OBJ_TB_ORCAMENTO_HISTORICO();
        BLL_TB_ORCAMENTO_HISTORICO b_tb_orcamento_historico = new BLL_TB_ORCAMENTO_HISTORICO();


        // CADASTRO
        OBJ_TB_CADASTRO o_tb_cadastro = new OBJ_TB_CADASTRO();
        BLL_TB_CADASTRO b_tb_cadastro = new BLL_TB_CADASTRO();

        // ENDERECO CADASTRO
        OBJ_TB_ENDERECO_CADASTRO o_tb_endereco_cadastro = new OBJ_TB_ENDERECO_CADASTRO();
        BLL_TB_ENDERECO_CADASTRO b_tb_endereco_cadastro = new BLL_TB_ENDERECO_CADASTRO();

        // FORMA PAGAMENTO
        BLL_TB_FORMA_PAGAMENTO b_tb_forma_pagamento = new BLL_TB_FORMA_PAGAMENTO();

        // CONDICAO PAGAMENTO
        BLL_TB_CONDICAO_PAGAMENTO b_tb_condicao_pagamento = new BLL_TB_CONDICAO_PAGAMENTO();

        // EMPRESA
        BLL_TB_EMPRESA b_tb_empresa = new BLL_TB_EMPRESA();
        OBJ_TB_EMPRESA o_tb_empresa = new OBJ_TB_EMPRESA();


        BLL_TB_TIPO_ENDERECO b_tb_tipo_endereco = new BLL_TB_TIPO_ENDERECO();

        BLL_TB_TIPO_LOGRADOURO b_tb_tipo_logradouro = new BLL_TB_TIPO_LOGRADOURO();

        BLL_TB_PAISES b_tb_paises = new BLL_TB_PAISES();

        BLL_TB_CIDADE b_tb_cidade = new BLL_TB_CIDADE();
        OBJ_TB_CIDADE o_tb_cidade = new OBJ_TB_CIDADE();

        BLL_TB_UF b_tb_uf = new BLL_TB_UF();
        OBJ_TB_UF o_tb_uf = new OBJ_TB_UF();

        // ORCAMENTO
        BLL_TB_TIPO_SITUACAO_ORCAMENTO b_tb_situacao_orcamento = new BLL_TB_TIPO_SITUACAO_ORCAMENTO();

        // UNIDADE MEDIDA
        BLL_TB_UNIDADE_MEDIDA b_tb_unidade_medida = new BLL_TB_UNIDADE_MEDIDA();

        // PRODUTO
        OBJ_TB_PRODUTO o_tb_produto = new OBJ_TB_PRODUTO();
        BLL_TB_PRODUTO b_tb_produto = new BLL_TB_PRODUTO();

        // LOG ERRO
        BLL_TB_LOG_ERRO b_tb_log_erro = new BLL_TB_LOG_ERRO();

        // operacao
        BLL_TB_ORCAMENTO_OPERACAO b_tb_orcamento_operacao = new BLL_TB_ORCAMENTO_OPERACAO();

        OBJ_TB_VEICULO o_tb_veiculo = new OBJ_TB_VEICULO();
        BLL_TB_VEICULO b_tb_veiculo = new BLL_TB_VEICULO();

        OBJ_TB_ORCAMENTO_VEICULO o_tb_orcamento_veiculo = new OBJ_TB_ORCAMENTO_VEICULO();
        BLL_TB_ORCAMENTO_VEICULO b_tb_orcamento_veiculo = new BLL_TB_ORCAMENTO_VEICULO();

        private int id_operacao {get ; set;}
        protected void Page_Load(object sender, EventArgs e)
        {
            if (PUB_SESSAO.Logado())
            {

                if (Request["id_operacao"] != null)
                {
                    id_operacao = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(Request["id_operacao"].ToString()));
                }


                if (!IsPostBack)
                {
                    TituloPagina();

                    //Session.Remove("dt_orcamento_item");

                    // dropdownlist                    
                    b_tb_condicao_pagamento.PreencheControleWeb(DDL_ID_CONDICAO_PAGAMENTO, true);
                    b_tb_empresa.PreencheControleWeb(DDL_ID_EMPRESA, true);
                    b_tb_forma_pagamento.PreencheControle(DDL_ID_FORMA_PAGAMENTO, true);
                    b_tb_situacao_orcamento.PreencheControle(DDL_ID_SITUACAO_ORCAMENTO, true); 
                    b_tb_orcamento_operacao.PreencheControle(DDL_ID_OPERACAO, false);


                    DDL_ID_OPERACAO.SelectedValue = string.Format("{0}", id_operacao);
                    DDL_ID_OPERACAO.Enabled = false;


                    DDL_ID_FORMA_PAGAMENTO.SelectedValue = string.Format("{0}", (int)PUB_ENUM.FORMA_PAGAMENTO.AVISTA);
                    DDL_ID_CONDICAO_PAGAMENTO.SelectedValue = string.Format("{0}", (int)PUB_ENUM.CONDICAO_PAGAMENTO.DINHEIRO);

                    DDL_ID_SITUACAO_ORCAMENTO.SelectedValue = string.Format("{0}", (int)PUB_ENUM.TIPO_SITUACAO_ORCAMENTO.ABERTO);
                    DDL_ID_SITUACAO_ORCAMENTO.Enabled = false;
                    
                    TXT_DT_EMISSAO.Text = DateTime.Now.ToShortDateString();


                    TXT_VALOR_DESCONTO.Text = "0,00";
                    TXT_VALOR_OUTRO.Text = "0,00";
                    TXT_VALOR_TOTAL_DESCONTO.Text = "0,00";                    
                    TXT_VALOR_TOTAL_ITEM.Text = "0,00";
                    TXT_VALOR_TOTAL_ORCAMENTO.Text = "0,00";
                    TXT_VALOR_TOTAL_OUTRO.Text = "0,00";
                    TXT_VALOR_TOTAL_PRODUTO.Text = "0,00";
                    TXT_VALOR_TOTAL_SERVICO.Text = "0,00";
                    TXT_VALOR_UNITARIO.Text = "0,00";
                    TXT_QTD.Text = "1";


                    TAB_CONTAINER.ActiveTab = TAB_ORCAMENTO;
                }
                else
                {

                    if (Session["id_cadastro"] != null)
                    {
                        int id_cadastro = Convert.ToInt32(Session["id_cadastro"].ToString());


                        o_tb_cadastro = b_tb_cadastro.SelecionarObjetoPorId(id_cadastro);
                        TXT_ID_CLI_FOR.Text = o_tb_cadastro.id.ToString();
                        TXT_NOME_CLI_FOR.Text = o_tb_cadastro.nome.ToString();
                        

                        Session.Remove("id_cadastro");

                    }

                    if (Session["id_produto"] != null)
                    {
                        int id_produto = Convert.ToInt32(Session["id_produto"].ToString());


                        o_tb_produto = b_tb_produto.SelecionarObjetoPorId(id_produto);

                        TXT_ID_PRODUTO_SERVICO.Text = id_produto.ToString();
                        TXT_DESCRICAO.Text = o_tb_produto.descricao.ToString();
                        TXT_VALOR_DESCONTO.Text = "0,00";
                        TXT_VALOR_OUTRO.Text = "0,00";
                        TXT_VALOR_UNITARIO.Text = PUB_FUNCOES.TrataDecimal(o_tb_produto.valor_venda.ToString());
                        TXT_VALOR_TOTAL_ITEM.Text = PUB_FUNCOES.TrataDecimal(o_tb_produto.valor_venda.ToString());
                        Session.Remove("id_produto");

                    }


                }

                if (GRV_TB_ORCAMENTO_ITEM.Rows.Count > 0)
                {
                    PNL_ORCAMENTO_ITEM.Visible = true;
                }
                else
                {
                    PNL_ORCAMENTO_ITEM.Visible = false;
                }

            }
        } 


      

        protected void BTN_SALVAR_Click(object sender, EventArgs e)
        {
            
            string msg = string.Empty;
            try
            {
               
                if (GRV_TB_ORCAMENTO_ITEM.Rows.Count > 0)
                {

                    if (TXT_ID_CLI_FOR.Text != string.Empty && TXT_NOME_CLI_FOR.Text != string.Empty
                    && DDL_ID_EMPRESA.SelectedValue != string.Empty)
                    {
                        using (TransactionScope scope = new TransactionScope())
                        {

                            IncluirOrcamento();

                            //  incluir item da tabela temporaria
                            //foreach (DataRow dr in b_tb_orcamento_item.Dt_orcamento_item.Rows)
                            //{
                            //    o_tb_orcamento_item = new OBJ_TB_ORCAMENTO_ITEM();
                            //    o_tb_orcamento_item.id_orcamento = Convert.ToInt32(HF_ID.Value);
                            //    o_tb_orcamento_item.id_produto_servico = Convert.ToInt32(dr["id_produto_servico"].ToString());
                            //    o_tb_orcamento_item.id_tipo_item = Convert.ToInt32(dr["id_tipo_item"].ToString());
                            //    o_tb_orcamento_item.ean = dr["ean"] == DBNull.Value ? (int?)null : Convert.ToInt32(dr["ean"].ToString());
                            //    o_tb_orcamento_item.descricao = dr["descricao"].ToString();
                            //    o_tb_orcamento_item.id_unidade_medida = Convert.ToInt32(dr["id_unidade_medida"].ToString());
                            //    o_tb_orcamento_item.qtd = Convert.ToDecimal(dr["qtd"].ToString());
                            //    o_tb_orcamento_item.valor_unitario = Convert.ToDecimal(dr["valor_unitario"].ToString());
                            //    o_tb_orcamento_item.valor_total = Convert.ToDecimal(dr["valor_total"].ToString());
                            //    o_tb_orcamento_item.valor_desconto = Convert.ToDecimal(dr["valor_desconto"].ToString());
                            //    o_tb_orcamento_item.valor_outro = Convert.ToDecimal(dr["valor_outro"].ToString());                                
                            //    b_tb_orcamento_item.Incluir(o_tb_orcamento_item);

                            //}

                            IncluirOrcamentoHistorico(string.Format("Login {0} criou o orçamento Nº {1}", PUB_SESSAO.Login,HF_ID.Value));

                            msg = "Orçamento Nº " + HF_ID.Value+  " foi criado com sucesso";
                            Master.MSG_ALERTA(msg, string.Format("orcamento_visualizar.aspx?id={0}&id_operacao={1}", HF_ID.Value, id_operacao), false);

                            // remove a sessao da grid
                           // Session.Remove("dt_orcamento_item");

                            scope.Complete();

                        }

                    }
                }
                else
                {
                    Master.MSG_ALERTA("É necessário incluir um produto para salvar o orçamento.");
                }

                



            }
            catch (Exception ex)
            {
                b_tb_log_erro.IncluirLogErro(ex);
                msg = "Erro ao tentar salvar o orçamento detalhe do erro - " + ex.Message;
                Master.MSG_ERRO(msg);

            }

        }


      

        protected void BTN_CANCELAR_Click(object sender, EventArgs e)
        {
            Response.Redirect(string.Format("default.aspx?id_operacao={0}",id_operacao ), false);
        }



        protected void DDL_ID_FORMA_PAGAMENTO_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty)
            {
                b_tb_condicao_pagamento.PreencheControleWeb(DDL_ID_CONDICAO_PAGAMENTO, string.Format("tb_condicao_pagamento.id_forma_pagamento = {0}", DDL_ID_FORMA_PAGAMENTO.SelectedValue), "", false);
            }
            else
            {
                DDL_ID_CONDICAO_PAGAMENTO.SelectedValue = string.Empty;
            }


        }

        // usando tabela temporaria
        //private void PreencheOrcamentoItem()
        //{            
        //        GRV_TB_ORCAMENTO_ITEM.DataSource = b_tb_orcamento_item.Dt_orcamento_item;
        //        GRV_TB_ORCAMENTO_ITEM.DataBind();                                    
        //}

        private void PreencheOrcamentoItem()
        {
            GRV_TB_ORCAMENTO_ITEM.DataSource = b_tb_orcamento_item.Selecionar(string.Format("tb_orcamento_item.id_orcamento = {0}",HF_ID.Value),"");
            GRV_TB_ORCAMENTO_ITEM.DataBind();
        }
        

        protected void BTN_INCLUIR_ITEM_Click(object sender, EventArgs e)
        {
            try
            {

                if (TXT_ID_PRODUTO_SERVICO.Text != string.Empty && TXT_VALOR_UNITARIO.Text != string.Empty && TXT_VALOR_TOTAL_ITEM.Text != string.Empty && TXT_QTD.Text != string.Empty && DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty && DDL_ID_CONDICAO_PAGAMENTO.SelectedValue != string.Empty)
                {
                    using (TransactionScope scope = new TransactionScope())
                    {
                        if (HF_ID.Value == string.Empty)
                        {
                           HF_ID.Value = IncluirOrcamento().ToString();
                        }

                        if (!b_tb_orcamento_item.ExisteItem(Convert.ToInt32(HF_ID.Value), Convert.ToInt32(TXT_ID_PRODUTO_SERVICO.Text)))
                        {

                            IncluirOrcamentoItem();
                            PreencheOrcamentoItem();
                            AtualizaTotalOrcamento();
                            TotalOrcamento();
                            PNL_ORCAMENTO_ITEM.Visible = true;

                            TXT_ID_PRODUTO_SERVICO.Text = string.Empty;
                            TXT_DESCRICAO.Text = string.Empty;
                            TXT_VALOR_UNITARIO.Text = "0,00";
                            TXT_VALOR_OUTRO.Text = "0,00";
                            TXT_VALOR_DESCONTO.Text = "0,00";
                            TXT_VALOR_TOTAL_ITEM.Text = "0,00";
                            TXT_QTD.Text = "1";

                            TituloPagina();


                            scope.Complete();
                        }
                        else
                        {
                            Master.MSG_ALERTA("O item já foi incluído.");
                        }

                        scope.Dispose();
                    }

                }
                
                
            }
            catch (Exception ex)
            {
                b_tb_log_erro.IncluirLogErro(ex);
                Master.MSG_ALERTA("Erro ao tentar incluir item no orçamento");
            }
        }
        private void TituloPagina()
        {
            if (Equals(id_operacao, (int)PUB_ENUM.ORCAMENTO_OPERACAO.ENTRADA))
            {
                LBL_TITULO_PAGINA.Text = string.Format("Orçamento Compra Nº {0}", HF_ID.Value);


            }
            else
            {
                LBL_TITULO_PAGINA.Text = string.Format("Orçamento Venda Nº {0}", HF_ID.Value);
            }
                        

        }

        private void AtualizaTotalOrcamento()
        {
            b_tb_orcamento_item.AtualizaTotalOrcamento(Convert.ToInt32(HF_ID.Value));
        }

        private void IncluirOrcamentoHistorico(string historico)
        {
            try
            {

                o_tb_orcamento_historico.dt_atualizacao = DateTime.Now;
                o_tb_orcamento_historico.id_orcamento = Convert.ToInt32(HF_ID.Value);
                o_tb_orcamento_historico.id_usuario = PUB_SESSAO.Id;
                o_tb_orcamento_historico.desc_orcamento_historico = historico;
                b_tb_orcamento_historico.Incluir(o_tb_orcamento_historico);
            }
            catch (Exception)
            {
                
                throw;
            }
       

        }

        private void IncluirOrcamentoItem()
        {
            try
            {
                o_tb_produto = b_tb_produto.SelecionarObjetoPorId(Convert.ToInt32(TXT_ID_PRODUTO_SERVICO.Text));
                o_tb_orcamento_item.id_orcamento = Convert.ToInt32(HF_ID.Value);
                o_tb_orcamento_item.descricao = TXT_DESCRICAO.Text.Trim();
                o_tb_orcamento_item.ean = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(o_tb_produto.ean.ToString()));            
                o_tb_orcamento_item.id_produto_servico = o_tb_produto.id;
                o_tb_orcamento_item.id_tipo_item = o_tb_produto.id_tipo_item;
                o_tb_orcamento_item.id_unidade_medida = o_tb_produto.id_unidade_medida;
                o_tb_orcamento_item.qtd = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_QTD.Text));
                o_tb_orcamento_item.valor_desconto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_DESCONTO.Text));
                o_tb_orcamento_item.valor_outro = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_OUTRO.Text));
                o_tb_orcamento_item.valor_total = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_ITEM.Text));
                o_tb_orcamento_item.valor_unitario = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_UNITARIO.Text));

                // Incluir o Item na tabela temporaria
                //b_tb_orcamento_item.PreencheDataTable(b_tb_orcamento_item.Dt_orcamento_item, o_tb_orcamento_item);

                b_tb_orcamento_item.Incluir(o_tb_orcamento_item);
            }
            catch (Exception)
            {
                
                throw;
            }
          

        }

        //private void AlterarOrcamento()
        //{
        //    // ORCAMENTO
        //    o_tb_orcamento.id = Convert.ToInt32(HF_ID.Value);
        //    o_tb_orcamento.id_cadastro = Convert.ToInt32(TXT_ID_CLI_FOR.Text);
        //    if (TXT_DT_APROVACAO.Text != string.Empty)
        //        o_tb_orcamento.dt_aprovacao = Convert.ToDateTime(TXT_DT_APROVACAO.Text);                  
        //    if (TXT_DT_EMISSAO.Text != string.Empty)
        //        o_tb_orcamento.dt_emissao = Convert.ToDateTime(TXT_DT_EMISSAO.Text);
        //    if (TXT_DT_ENTREGA.Text != string.Empty)
        //        o_tb_orcamento.dt_entrega = Convert.ToDateTime(TXT_DT_ENTREGA.Text);
        //    if (TXT_DT_VALIDADE.Text != string.Empty)
        //        o_tb_orcamento.dt_validade = Convert.ToDateTime(TXT_DT_VALIDADE.Text);
        //    if (DDL_ID_CONDICAO_PAGAMENTO.SelectedValue != string.Empty)
        //        o_tb_orcamento.id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);
        //    if (DDL_ID_EMPRESA.SelectedValue != string.Empty)
        //        o_tb_orcamento.id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);
        //    if (DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty)
        //        o_tb_orcamento.id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);
        //    if (DDL_ID_SITUACAO_ORCAMENTO.SelectedValue != string.Empty)
        //        o_tb_orcamento.id_situacao_orcamento = Convert.ToInt32(DDL_ID_SITUACAO_ORCAMENTO.SelectedValue);

            
        //    o_tb_orcamento.id_operacao = Convert.ToInt32(DDL_ID_OPERACAO.SelectedValue);
        //    o_tb_orcamento.dt_checkin = null;
        //    o_tb_orcamento.id_usuario_criador = PUB_SESSAO.Id;
        //    o_tb_orcamento.id_usuario_checkin = null;
        //    o_tb_orcamento.valor_total_desconto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_DESCONTO.Text));            
        //    o_tb_orcamento.valor_total_orcamento = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_ORCAMENTO.Text));
        //    o_tb_orcamento.valor_total_outro = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_OUTRO.Text));
        //    o_tb_orcamento.valor_total_produto =Convert.ToDecimal(PUB_FUNCOES.TrataDecimal( TXT_VALOR_TOTAL_PRODUTO.Text));
        //    o_tb_orcamento.valor_total_servico = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_SERVICO.Text));
        //    o_tb_orcamento.observacao = TXT_OBSERVACAO.Text.Trim();
        //    o_tb_orcamento.veiculo_km = TXT_KM.Text.Trim();
        //    o_tb_orcamento.veiculo_placa = TXT_PLACA.Text;

        //    b_tb_orcamento.Alterar(o_tb_orcamento);
            

        //}

        private int IncluirOrcamento()
        {
            int id_orcamento = 0;
            // ORCAMENTO
            o_tb_orcamento.id_cadastro = Convert.ToInt32(TXT_ID_CLI_FOR.Text);
            if (TXT_DT_APROVACAO.Text != string.Empty)
                o_tb_orcamento.dt_aprovacao = Convert.ToDateTime(TXT_DT_APROVACAO.Text);

            if(DDL_ID_OPERACAO.SelectedValue != string.Empty)
             o_tb_orcamento.id_operacao = Convert.ToInt32(DDL_ID_OPERACAO.SelectedValue);

            o_tb_orcamento.dt_checkin = null;
            o_tb_orcamento.id_usuario_criador = PUB_SESSAO.Id;
            o_tb_orcamento.id_usuario_checkin = null;

            if (TXT_DT_EMISSAO.Text != string.Empty)
                o_tb_orcamento.dt_emissao = Convert.ToDateTime(TXT_DT_EMISSAO.Text);
            if (TXT_DT_ENTREGA.Text != string.Empty)
                o_tb_orcamento.dt_entrega = Convert.ToDateTime(TXT_DT_ENTREGA.Text);
            if (TXT_DT_VALIDADE.Text != string.Empty)
                o_tb_orcamento.dt_validade = Convert.ToDateTime(TXT_DT_VALIDADE.Text);
            if (DDL_ID_CONDICAO_PAGAMENTO.SelectedValue != string.Empty)
                o_tb_orcamento.id_condicao_pagamento = Convert.ToInt32(DDL_ID_CONDICAO_PAGAMENTO.SelectedValue);
            if (DDL_ID_EMPRESA.SelectedValue != string.Empty)
                o_tb_orcamento.id_empresa = Convert.ToInt32(DDL_ID_EMPRESA.SelectedValue);
            if (DDL_ID_FORMA_PAGAMENTO.SelectedValue != string.Empty)
                o_tb_orcamento.id_forma_pagamento = Convert.ToInt32(DDL_ID_FORMA_PAGAMENTO.SelectedValue);
            if (DDL_ID_SITUACAO_ORCAMENTO.SelectedValue != string.Empty)
                o_tb_orcamento.id_situacao_orcamento = Convert.ToInt32(DDL_ID_SITUACAO_ORCAMENTO.SelectedValue);

            o_tb_orcamento.observacao = TXT_OBSERVACAO.Text.Trim();

            o_tb_orcamento.veiculo_km = TXT_KM.Text;
            o_tb_orcamento.veiculo_placa = TXT_PLACA.Text;

            o_tb_orcamento.valor_total_desconto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_DESCONTO.Text));
            o_tb_orcamento.valor_total_orcamento = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_ORCAMENTO.Text));
            o_tb_orcamento.valor_total_outro = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_OUTRO.Text));
            o_tb_orcamento.valor_total_produto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_PRODUTO.Text));
            o_tb_orcamento.valor_total_servico = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TOTAL_SERVICO.Text));


            if (HF_ID.Value != string.Empty)
            {
                o_tb_orcamento.id = Convert.ToInt32(HF_ID.Value);
                b_tb_orcamento.Alterar(o_tb_orcamento);

            }
            else
            {
                id_orcamento = b_tb_orcamento.Incluir(o_tb_orcamento);
                TXT_NUM_ORCAMENTO.Text = id_orcamento.ToString();     
            }                                

            return id_orcamento;

        }

        // usando tabela temporaria
        //private void TotalOrcamento()
        //{

        //    DataTable dt = b_tb_orcamento_item.Dt_orcamento_item;

        //    TXT_VALOR_TOTAL_DESCONTO.Text = PUB_FUNCOES.FormataNumerico(b_tb_orcamento_item.SomaValor(dt, "valor_desconto").ToString());
        //    TXT_VALOR_TOTAL_ORCAMENTO.Text = PUB_FUNCOES.FormataNumerico(b_tb_orcamento_item.SomaValor(dt, "valor_total").ToString());
        //    TXT_VALOR_TOTAL_OUTRO.Text = PUB_FUNCOES.FormataNumerico(b_tb_orcamento_item.SomaValor(dt,"valor_outro").ToString());
        //    TXT_VALOR_TOTAL_PRODUTO.Text = PUB_FUNCOES.FormataNumerico(b_tb_orcamento_item.SomaValor(dt,"valor_unitario", string.Format("id_tipo_item not in ({0})", (int)PUB_ENUM.TIPO_ITEM.Servicos)).ToString());
        //    TXT_VALOR_TOTAL_SERVICO.Text = PUB_FUNCOES.FormataNumerico(b_tb_orcamento_item.SomaValor(dt, "valor_unitario", string.Format("id_tipo_item in ({0})", (int)PUB_ENUM.TIPO_ITEM.Servicos)).ToString());
            

        //}

        private void TotalOrcamento()
        {
            try
            {
                o_tb_orcamento = b_tb_orcamento.SelecionarObjetoPorId(Convert.ToInt32(HF_ID.Value));

                TXT_VALOR_TOTAL_DESCONTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_orcamento.valor_total_desconto.ToString());
                TXT_VALOR_TOTAL_ORCAMENTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_orcamento.valor_total_orcamento.ToString());
                TXT_VALOR_TOTAL_OUTRO.Text = PUB_FUNCOES.FormataNumerico(o_tb_orcamento.valor_total_outro.ToString());
                TXT_VALOR_TOTAL_PRODUTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_orcamento.valor_total_produto.ToString());
                TXT_VALOR_TOTAL_SERVICO.Text = PUB_FUNCOES.FormataNumerico(o_tb_orcamento.valor_total_servico.ToString());

            
            }
            catch (Exception)
            {
                
                throw;
            }

            

        }

        protected void IMG_BTN_EXCLUIR_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                ImageButton btn = (ImageButton)sender;

                int id_orcamento_item = 0;
                if (btn != null)
                {
                    id_orcamento_item = Convert.ToInt32(btn.CommandArgument);


                    o_tb_orcamento_item = b_tb_orcamento_item.SelecionarObjetoPorId(id_orcamento_item);

                    b_tb_orcamento_item.Excluir(o_tb_orcamento_item);
                    PreencheOrcamentoItem();
                    TotalOrcamento();

                    Master.MSG_ALERTA("Item excluído com sucesso.");
                    //if (b_tb_orcamento_item.Dt_orcamento_item.Rows.Count > 0)
                    //{
                    //    b_tb_orcamento_item.Dt_orcamento_item.Rows[id_orcamento_item].Delete();
                    //    b_tb_orcamento_item.Dt_orcamento_item.AcceptChanges();
                    //    PreencheOrcamentoItem();                        
                    //    TotalOrcamento();
                    //}                    

                    
                }
            }
            catch (Exception)
            {
                
                throw;
            }
        }


      

 

        protected void IMG_BTN_PRIMEIRO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = 0;
            CarregaGrid();
        }

        protected void IMG_BTN_ANTERIOR_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.PageIndex - 1;
            CarregaGrid();
        }

        protected void IMG_BTN_PROXIMO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.PageIndex + 1;
            CarregaGrid();
        }

        protected void IMG_BTN_ULTIMO_Click(object sender, ImageClickEventArgs e)
        {
            PUB_PAGINACAO.PageIndex = PUB_PAGINACAO.TotalDePaginas - 1;
            CarregaGrid();
        }
        protected void GRV_TB_ORCAMENTO_ITEM_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GRV_TB_ORCAMENTO_ITEM.PageIndex = e.NewPageIndex;
            PUB_PAGINACAO.PageIndex = e.NewPageIndex;
            CarregaGrid();
        }


        public void CarregaGrid()
        {

            try
            {
                StringBuilder sb = new StringBuilder();

                DataSet ds = new DataSet();
                List<string> lista = new List<string>();

                lista.Add(string.Format(" tb_orcamento_item.id_orcamento = {0}",HF_ID.Value));  
              
                sb.Append(string.Join(" and ", lista.ToArray()));


                ds = b_tb_orcamento_item.Selecionar(sb.ToString(), PUB_PAGINACAO.Sort, PUB_PAGINACAO.PageIndex, PUB_PAGINACAO.PageSize);

                if (ds.Tables[0].Rows.Count > 0)
                {
                    GRV_TB_ORCAMENTO_ITEM.DataSource = ds;
                    GRV_TB_ORCAMENTO_ITEM.DataBind();
                    PUB_PAGINACAO.Paginacao(true);
                }
                else
                {
                    GRV_TB_ORCAMENTO_ITEM.EmptyDataText = "Nenhum registro foi encontrado";
                    GRV_TB_ORCAMENTO_ITEM.DataBind();
                }
            }
            catch (Exception)
            {

                throw;
            }



        }

        protected void GRV_TB_ORCAMENTO_ITEM_Sorting(object sender, GridViewSortEventArgs e)
        {
            PUB_PAGINACAO.Sort = e.SortExpression;
            if (PUB_PAGINACAO.SortDirection == SortDirection.Ascending)
            {
                PUB_PAGINACAO.SortDirection = SortDirection.Descending;
                PUB_PAGINACAO.Sort = PUB_PAGINACAO.Sort + " " + PUB_PAGINACAO.DESCENDENTE;
            }
            else
            {
                PUB_PAGINACAO.SortDirection = SortDirection.Ascending;
                PUB_PAGINACAO.Sort = PUB_PAGINACAO.Sort + "  " + PUB_PAGINACAO.ASCENDENTE;
            }

            CarregaGrid();

        }

    }
}